"""
1.需要继承自django.core.files.storage.Storage
Django必须能够在没有任何参数的情况下实例化您的存储系统。
这意味着任何设置都应该来自django.conf.settings
3.您的存储类必须实现_open()和_save() 方法以及适用于您的存储类的任何其他方法。有
关这些方法的更多信息，请参见下
"""
from django.conf import settings
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.utils.deconstruct import deconstructible


@deconstructible
class FastDFSStorage(Storage):
    """
    自定义文件上传类
    """

    # def __init__(self, option=None):
    #     if not option:
    #         option = settings.CUSTOM_STORAGE_OPTIONS
    def _open(self, name, mode='rb'):
        pass
    # save保存资源
    # 自定义save方法把图片保存到fdfs服务器上

    def _save(self, name, content, max_length=None):
        # 1.创建客户端,加载配置文件
        client = Fdfs_client('utils/fdfs/client.conf')
        # 2.获取图片资源(读取图片二进制 因为name只是图片的名字不是路径)
        # name,    图片名
        # content  图片的内容
        data = content.read()
        # upload_by_buffer上传二进制
        result = client.upload_by_buffer(data)
        # 3.上传
        # 4.根据上传的状态来获取Remote file_id'
        if result.get('Status') == 'Upload successed.':
            file_id = result.get('Remote file_id')
        # 把file_id返回回去,因为系统要使用
        print(file_id)
        return file_id

    # 存在
    # 返回图片是否存在
    # 我们的fdfs已经做过图片的重名处理了
    # 所以不需要判断是否存在,尽管上传就可以
    def exists(self, name):
        return False

    def url(self, name):
        # name 其实就是我们当时返还的Remote file_id
        # group1/M00/00/00/wKi9Qlylw1CAZviMAABILAaZS3A517.jpg
        return 'http://192.168.189.66:8888/' + name

